 基本的深度学习包括两个独立的阶段，即：（i）训练阶段：通过迭代训练调整神经网络（DNN）模型参数，
 这一过程常采用随机梯度下降法（SGD）[18]来逼近最优模型参数，以及（ii）推理阶段，使用经过训练的模型对真实数据进行推断，返回结果。

  此外，Facebook的基于CPU的推理系统通过批处理和共同定位推理作业[37]技术来提高系统性能。

为了理解这个问题，我们在一个单NUMA的28核Intel Xeon上8280 CPU[5]上，对ResNet50[39]模型进行推理，并测量内存带宽和CPU利用率。
 图1的结果显示，对于MXNet，内存带宽限制了激活层（Act）和批处理规一化层（BN）的执行并导致CPU利用率不足。
 此时，大约有一半的带宽空闲在卷积（Conv）层，这导致宝贵的CPU内存带宽率只有的61.3\%。

 内存带宽利用率低的根本原因是：在当前DL平台中只有一个实例分配给整个CPU（这种方法称为“单CPU单实例”），
 其中实例是指迭代处理批次输入数据的一个进程或线程，也称之为分布式计算中的一个Worker。


 我们将DNN中的层分为两类，即执行复杂算术运算的计算密集型层（如卷积和矩阵乘法（GEMM）），以及访存密集型层，它们执行更简单的单元素操作（如激活和BN）。
 将通过§3中的实验，如图1所示，DNN模型的层级同步执行使多核CPU的内存带宽成为瓶颈并导致访存密集型层的间歇性CPU利用率不足。 但是当参与计算的核心数较少时，
 内存带宽不会限制吞吐量，在这种情况下总计算容量不会使带宽饱和。


   需要注意的是：单核心单实例相比单CPU单实例，并不增加迭代中涉及的核心总数，
  单CPU单实例仍然可以通过使用MKL-DNN来占用整个CPU的所有内核，但此时内存带宽利用率较低。
  

\subsection{讨论}
为了满足普通桌面、服务器和云应用程序的性能要求，
目前 CPU 内存的延迟度和容量比 GPU 内存低得多。
但是，CPU 将内存带宽视为次要性能指标，因为大多数在 CPU 上运行的应用程序没有如此高的带宽要求。
图1所示，CPU 内存带宽低会导致严重的带宽争用，并影响 DL 训练和推理中访存密集型操作的执行，从而降低基于 CPU 的 DL 的性能。
虽然 ParaX 通过将访问密集型操作与计算密集型操作重叠来有效缓解带宽争用问题，但基于软件的解决方案可能无法充分利用现代多核 CPU 的计算能力，
因为它们的 FLOPS 越来越高，在不久的将来甚至会与 GPU 相媲美。我们对内存访问带宽要求的分析（§3） 意味着可以通过设计新的 DL
友好型 CPU 内存架构来解决带宽争用问题，我们可以在其中添加一个附加级别的片上高带宽缓存，其延迟要求较不严格，可以低于或与 L3 缓存并行，可能与不同的缓存调度策略集成。